<?php


namespace App\Service;

use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;

class MailService
{
    /**
     * 发送操作确认邮件
     */
    public function sendOperationConfirmation($operatorName,$confrimorName, $scheduledTime,$reason, $pcUrl,$mobileUrl,$type,$recipients,$title)
    {

        $content = $this->buildConfirmationContent($operatorName,$confrimorName, $scheduledTime,$reason, $pcUrl,$mobileUrl,$type);

        $this->sendEmail($recipients, $title, $content);
    }

    /**
     * 构建确认邮件内容
     */
    protected function buildConfirmationContent($operatorName,$confrimorName, $scheduledTime, $reason,$pcUrl,$mobileUrl,$type)
    {
        switch ($type) {
            case 1:
                $content = <<<CONTENT
请登录管理后台确认以下操作内容

操作者：{$operatorName}

公开确认者：{$confrimorName}

公开时间：{$scheduledTime}

审核页面预览（PC版）：
{$pcUrl}

审核页面预览（手机版）：
{$mobileUrl}

*本邮件的送信地址为送信专用地址，请勿直接回复
CONTENT;
                break;
            case 2:
                $content = <<<CONTENT
请登录管理后台确认以下操作内容

操作者：{$operatorName}

审核拒绝者：{$confrimorName}

拒绝时间：{$scheduledTime}

拒绝原因：
{$reason}

审核页面预览（PC版）：
{$pcUrl}

审核页面预览（手机版）：
{$mobileUrl}

*本邮件的送信地址为送信专用地址，请勿直接回复
CONTENT;
                break;
            default:
                $content = <<<CONTENT
请登录管理后台确认以下操作内容

操作者：{$operatorName}

预设公开时间：{$scheduledTime}

审核页面预览（PC版）：
{$pcUrl}

审核页面预览（手机版）：
{$mobileUrl}

*本邮件的送信地址为送信专用地址，请勿直接回复
CONTENT;
                break;
        }
        return $content;
    }

    /**
     * 通用邮件发送方法
     */
    protected function sendEmail($recipients, $subject, $content)
    {
        if (empty($recipients)) {
            Log::warning('邮件发送失败：收件人列表为空');
            return false;
        }

        try {
            Mail::raw($content, function ($message) use ($recipients, $subject) {
                $message->to($recipients)
                    ->subject($subject)
                    ->from(
                        config('mail.from.address'),
                        config('mail.from.name')
                    );
            });

            Log::info('邮件发送成功', [
                'recipients' => $recipients,
                'subject' => $subject
            ]);

            return true;
        } catch (\Exception $e) {
            Log::error('邮件发送失败: ' . $e->getMessage(), [
                'exception' => $e
            ]);
            return false;
        }
    }

}
